Enhanced GPS sample update
Some times ago I published my modded GPS_Sample code (see http://www.hjgode.de/wp/2009/05/12/enhanced-gps-sampe/), which is based on a MS GPSsample.
This time I added support for Int*rm*c CN50, which does NOT support reading raw GPS data using a serial connection. Instead the CN50 streams the data to the ‘communication’ port.
BTW: did you know how easy it is to create skins for use with MyMobiler?
The stream reader part is outsourced into a thread, which is based on my background thread class bgThread2 (see http://www.hjgode.de/wp/2010/06/01/mobile-development-easy-to-use-background-thread-with-gui-update/). It was very easy to implement the stream reading within the thread, so the GUI is not blocked during read waits.
#region TheTHREAD
private void myThreadStart()
{
System.Diagnostics.Debug.WriteLine("Entering thread proc");
int _i=0;
try
{
do
{
//The blocking function...
char[] cSep = new char[] { '\r', '\n' };
int iRes = 0;
do
{
string sRes = "";
iRes = GPS_Sample8.ReadFileClass.readFile(_sCOM, ref sRes);
string[] sAll = sRes.Split(cSep);
foreach (string s1 in sAll)
{
SendData(bgWnd.Hwnd, iRes, s1);
}
//Application.DoEvents();
Thread.Sleep(100);
} while (iRes == 0);
System.Diagnostics.Debug.WriteLine("Thread sleeps...");
_i++;
Thread.Sleep(100);
} while (bRunThread);
}
catch (ThreadAbortException)
{
System.Diagnostics.Debug.WriteLine("Thread will abort");
bRunThread = false;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception in ThreadStart: " + ex.Message);
}
System.Diagnostics.Debug.WriteLine("ThreadProc ended");
}
#endregion
The main form code has some new functions to check for iCN50 and start/stop the stream reader background thread:
#region CN50raw
bgThread2 myStreamReaderThread;
private void OpenStream()
{
//background thread already running?
if (myStreamReaderThread == null)
{
string szPort="";
szPort = GetGPSPort();
if (szPort != "")
{
//start a new thread
myStreamReaderThread = new bgThread2(szPort);
myStreamReaderThread.bgThread2Event += new bgThread2.bgThread2EventHandler(myStreamReaderThread_bgThread2Event);
}
else
AddRawText("No raw GPS port found");
}
}
void myStreamReaderThread_bgThread2Event(object sender, bgThread2.BgThreadEventArgs bte)
{
AddRawText(bte.sString);
}
private void CloseStream()
{
if (myStreamReaderThread != null)
{
myStreamReaderThread.Dispose();
Application.DoEvents();
myStreamReaderThread = null;
}
Application.DoEvents();
mnuRAWStart.Enabled = true;
mnuRAWStop.Enabled = false;
}
#endregion
NEW 12. nov. 2012: project now hosted at google!
Downloads (VS2008 solution targeting WM6 SDK):
[Download not found]updated source as of 9. nov 2011
[Download not found]



http://www.led-mg.de